class Solution {
public:
    int findNthDigit(int n) {
        if(n < 0)  return 0;
        /*
        寻找当前位数与对应字符的关系：先确定位数对应的字符，在确定对应位数的数位;
        举例：207位于100~999字符所对应的位数范围(190~2889)内,根据num计算公式得到位数207对应字符是105 
        */
        long nineNum = 9;
        int bit = 1;//表示当前位阶所占位数：如一个二位数字符占2个字符
        long upperLimit = nineNum * bit;//用以界定对应字符的位数
        while(n > upperLimit){
            nineNum *= 10;
            ++bit;
            upperLimit += (nineNum * bit);
        }
        //已确定了位数范围，即n所对应的字符位数是bit
        int lastUpperLimit = upperLimit - (nineNum * bit);
        int num = (n - lastUpperLimit - 1) / bit + nineNum / 9;//num是n所对应字符数值

        //通过取余结果确定对应位数
        int remain = (n - lastUpperLimit - 1) % bit;
        for(int i = remain; i < (bit - 1); ++i){
            num /= 10;
        }

        return (num % 10);
    }
};